package com.zhouyer.study.server;

import com.zhouyer.study.utils.HttpProtocolUtil;
import com.zhouyer.study.utils.StaticResourceUtil;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;

/**
 * 封装Response对象，需要依赖于OutputStream
 * 该对象的核心方法就是输出html
 *
 * @author zhouyao
 * @version 1.0
 * @date 2021/9/14 11:50 上午
 */
public class Response {
    private OutputStream outputStream;

    public Response() {
    }

    public Response(OutputStream outputStream) {
        this.outputStream = outputStream;
    }

    /**
     * 根据url，获取到静态资源文件的绝对路径，进一步根据绝对路径读取该静态资源文件，最终通过输出流输出
     *
     * @param url 静态资源文件路径
     * @return void
     * @author zhouyao
     * @date 2021/9/14 11:53 上午
     */
    public void outputHtml(String url) throws IOException {
        // 获取静态资源的绝对路径
        String absoluteResourcePath = StaticResourceUtil.getAbsolutePath(url);
        // 静态资源的绝对路径转成 静态资源文件
        File file = new File(absoluteResourcePath);
        if (file.exists() && file.isFile()) {
            // 读取静态资源文件，并输出静态资源文件
            StaticResourceUtil.outputStaticResource(new FileInputStream(file), outputStream);
        } else {
            // 输出404
            output(HttpProtocolUtil.getHttpHeader404());
        }
    }

    // 使用字节输出流输出指定字符串
    public void output(String content) throws IOException {
        outputStream.write(content.getBytes(StandardCharsets.UTF_8));
    }
}
